# 1. 实现菜单函数，输出下列信息，返回用户输入的编号，并进行输入校验。
#
#     print("****************************************")
#     print("*                                学生管理系统                         *")
#     print("*              1. 添加新学生信息              *")
#     print("*             2. 通过学号修改学生信息                 *")
#     print("*                3. 通过学号删除学生信息                 *")
#     print("*                4. 通过姓名删除学生信息                 *")
#     print("*             5. 通过学号查询学生信息          *")
#     print("*                6. 通过姓名查询学生信息          *")
#     print("*                7. 显示所有学生信息             *")
#     print("*                8. 退出系统                                           *")
#     print("****************************************")
#     select_op = input("输入编号选择操作：")
#
# 2. 实现控制函数，用来控制菜单的输出与功能的选择，直到用户选择8，结束程序运行。
# 3. 实现添加学生函数，函数参数为编号，姓名，年龄，性别四个参数，返回是否添加成功的结果，要求编号不可重复。
# 4. 实现修改函数，参数为学号，如果学生存在，则进行修改，不存在输出提示，并返回是否修改成功
# 5. 实现删除函数，参数为学号，如果学生存在，则进行删除，不存在输出提示，并返回是否删除成功
# 6. 实现删除函数，参数为姓名，如果学生存在，则进行删除（同名学生全部删除），不存在输出提示，并返回是否删除成功
# 7. 实现查询函数，参数为学号，如果学生存在，则输出学生信息，不存在输出提示，并返回是否查询成功
# 8. 实现查询函数，参数为姓名，如果学生存在，则输出学生信息（同名学生全部输出），不存在输出提示，并返回是否删除成功
# 9. 实现函数，输出所有学生信息

class Student:
    def __init__(self,sid,name,age,gender):
        self.sid = sid
        self.name = name
        self.age = age
        self.gender = gender

    def __str__(self):
       return f"学生编号：{self.sid}，姓名:{self.name}，年龄:{self.age}，性别:{self.gender}"

class StudentManager:
    def __init__(self):
        self.students = []

    def __menu(self):
        print("****************************************")
        print("*                                学生管理系统                         *")
        print("*              1. 添加新学生信息              *")
        print("*             2. 通过学号修改学生信息                 *")
        print("*                3. 通过学号删除学生信息                 *")
        print("*                4. 通过姓名删除学生信息                 *")
        print("*             5. 通过学号查询学生信息          *")
        print("*                6. 通过姓名查询学生信息          *")
        print("*                7. 显示所有学生信息             *")
        print("*                8. 退出系统                                           *")
        print("****************************************")
        select_op = input("输入编号选择操作：")
        return select_op

    def __get_sid(self):
        '''
        获取学生编号
        :return: 学生编号字符串
        '''
        sid = input("请输入学生id：")
        return sid

    def __get_name(self):
        name = input('请输入学生姓名：')
        return name

    def __get_age(self):
        while True:
            age = input('请输入学生年龄：')
            if age.isdigit():
                age = int(age)
                return age
            else:
                print('输入不合法，请重新输入')

    def __get_gender(self):
        gender = input('请输入学生性别：')
        return gender

    def add_student(self,sid,name,age,gender):
        for s in self.students:
            if s.sid == sid:
                print(f'有重复的{sid}')
                return '添加失败'
        else:
            student = Student(sid,name,age,gender)
            self.students.append(student)
            return '添加成功'

    def modify_student_by_id(self,sid,name,age,gender):
        for s in self.students[:]:
            if s.sid == sid:
                 s.name = name
                 s.age = age
                 s.gender = gender
                 return '修改成功'
        else:
            print('修改失败')
            return '修改失败'

    def delete_student_by_id(self,sid):
        for s in self.students[:]:
            if s.sid == sid:
                self.students.remove(s)
                return '删除成功'
        else:
            print('删除失败')
            return '删除失败'

    def delete_student_by_name(self,name):
        is_exist = []
        for s in self.students[:]:
            if s.name == name:
                is_exist.append(s)

        if len(is_exist) > 0:
            for i in is_exist:
                self.students.remove(i)
                return '删除成功'
        else:
            return '删除失败'

    def query_student_by_id(self,sid):
        for s in self.students:
            if s.sid == sid:
                Student.__str__(s)
                return '查询成功'
        else:
            return '查询失败'

    def query_student_by_name(self,name):
        is_exist = []
        for s in self.students:
            if s.name == name:
                is_exist.append(s)

        if len(is_exist) > 0:
            print(f'名称为：{name}的学生共{len(is_exist)}名，信息如下：')
            for i in is_exist:
                # print(f'学号：{i.sid}，姓名：{i.name},年龄：{i.age},性别：{i.gender}')
                print(i)
            return '查询成功'
        else:
            return '查询失败'

    def show_all_student(self):
        for student in self.students:
            print(f"'sid':{student.sid},'name':{student.name},'age':{student.age},'gender':{student.gender}")

    def manager(self):
        while True:
            select_op = self.__menu()
            if select_op in '12345678':
                if select_op == '1':
                    sid = self.__get_sid()
                    name = self.__get_name()
                    age = self.__get_age()
                    gender = self.__get_gender()
                    self.add_student(sid,name,age,gender)
                    self.show_all_student()
                    print(self.students)
                elif select_op == '2':
                    sid = self.__get_sid()
                    name = self.__get_name()
                    age = self.__get_age()
                    gender = self.__get_gender()
                    self.modify_student_by_id(sid,name,age,gender)
                    self.show_all_student()
                elif select_op == '3':
                    sid = self.__get_sid()
                    self.delete_student_by_id(sid)
                    self.show_all_student()
                    print(self.students)
                elif select_op == '4':
                    name = self.__get_name()
                    self.delete_student_by_name(name)
                    self.show_all_student()
                    print(self.students)
                elif select_op == '5':
                    sid = self.__get_sid()
                    self.query_student_by_id(sid)
                    self.show_all_student()
                elif select_op == '6':
                    name = self.__get_name()
                    self.query_student_by_name(name)
                    self.show_all_student()
                elif select_op == '7':
                    self.show_all_student()
                elif select_op == '8':
                    break
            else:
                print('输入不合法')

if __name__ == '__main__':
    student1 = Student(23,'a',20,'女')
    manager = StudentManager()
    manager.manager()






